The1736のページ


工作>Arduinoブートローダ



はじめに

Arduinoを使うには「ブートローダ」というものが必要です. この記事ではそのブートローダの導入方法を紹介していきます.

ブートローダとは

ブートローダはイメージとしてはパソコンでいうOSみたいなものです. ブートローダが書き込まれていると, Arduinoという方式で簡単なプログラムでマイコンを動作させることができます.

本家Arduinoから販売されているもの(例:Arduino UNO)等はブートローダが書き込まれているのでそのまま使えますが,

という場合は新たにブートローダを書き込む必要が出てきます. ブートローダが書き込まれていないキットとは 秋月電子で販売されているマイコンボードキット などを指しています.

何が必要なのか

パターン1 : ブートローダが書き込まれているチップを持っている場合

この場合は, ブレッドボードなどを持っていればブートローダを簡単に書き込むことができます. 本ページに示す書き込み基板を作ると便利です.

パターン2 : ブートローダが書き込まれているチップを持っていない場合

この場合でもブートローダを書き込むことは可能です. ただし, 面倒です. BitBang法という手段や, やAVRISP mkIIを使う方法がありますがいずれも手間のかかる作業が必要ですし, 特に後者はAVRISP mkII自体3700円(秋月価格)するなど「手軽に」とは行きません.

以上より, 私からは「ブートローダ書き込み済のチップ」を購入する等をおすすめします. 1つだけでもそのチップがあれば, 以下に示す方法でコピーするような感覚でブートローダ書き込みチップを増やすことが可能です.

参考: SWITCHSCIENCE - Arduinoブートローダ書き込み済みATMega328P-PU

ブートローダ書き込み専用基板の製作

ブレッドボードやジャンパーピンなどを持っている方は Arduino - ArduinoISP の記事等にある回路で追加に何かを取り揃える事なくブートローダ書き込みができます.

しかし, 将来いくつかのチップを書く可能性がある場合はこの手段を取ることはあまりお勧めできません. ブートローダを書き込む毎に配線をする必要があり手間になるということと, 配線ミスによりマイコンを壊してしまう可能性があるということが理由です.

そこで私は「専用基板」を作ってしまえばいいだろうと思い, 製作に取り掛かりました. 以下で紹介していきます.

必要な部品

部品参考備考
名称販売店通販コード単価[円]計[円]
両面基板Cサイズ1秋月P-03231100100(注)片面基板は不可
ICソケット28ピン300mil1P-013397070
コンデンサ22pF2P-036205101袋100円・20個入
0.1uF2P-06165481袋100円・25個入
水晶振動子16MHz1P-086713030
抵抗10kΩ1R-25103111袋100円・100個入

合計: 219円 (単価計算)

以下はオプションです. 母体となるマイコンにArduinoISPスケッチを書き込む際, 基板を外さずに使えるようスイッチをつけたり, LEDを光らせたい場合は以下が必要です. (なくてもブートローダは書けます)

部品参考備考
名称販売店通販コード単価[円]計[円]
スイッチ2回路2接点1秋月P-040289090
LED2I-023201020好きな色・輝度をお選びください.
抵抗1kΩ1R-25102111袋100円・100個入

回路図

基本的には Arduino - ArduinoISP に準拠しています. 追加点はArduino UNO利用時に推奨されている10uFの取り付けと, オプションとしてLEDとスイッチが書かれています.

BootLoader書き込み機回路図

※クリックするとPDFファイルが表示されます.

注意点

実装図

ボード上面
ボード下面

注意点

製作の様子

部品選定
製作基板

書き込み方法

手順は以下の通りです.

  1. ArduinoのボードをUSBケーブルで接続する
  2. 製作したボードに書き込みたいチップを取り付ける
  3. 製作したボードをArduinoのボードに取り付ける
  4. Arduinoのボードにスケッチを書き込む
  5. ブートローダを書き込む

それでは各手順を説明します.

1. ArduinoのボードをUSBケーブルで接続する

USBケーブル接続

※画像は 秋月電子基板利用Arduinoボード です.

2. 製作したボードに書き込みたいチップを取り付ける

ブートローダ書き込み済みのチップ(コピー元)をArduinoのボード側に取り付けます.

取り付け

3. 製作したボードをArduinoのボードに取り付ける

※製作した基板にスイッチを取り付けていない方は手順3.と4.を入れ替えてください.

差し込み
USBケーブル接続

製作したボードをArduinoのボードに取り付けます. Arduino UNOなどの場合はピン数が合いませんが, 「右寄せ」で取り付けてください.

4. Arduinoのボードにスケッチを書き込む

スケッチを書きます. この際, スイッチはOFF(奥側)にしてください.

  1. ファイル
  2. スケッチの例
  3. ArduinoISP
ArduinoISP

書き込みに失敗する場合は, マイコンボードやシリアルポートの設定, 製作した基板のスイッチのON/OFFを確認してください. なお, Arduino UNOブートローダが書き込まれている場合は, マイコンボード設定をArduino UNOにする必要があります.

5. ブートローダを書き込む

スイッチをON(手前)にします. ここで, 製作したボード右側のLEDが点滅していたら前段階まで成功しています.

USBケーブル接続

続いて, ブートローダを書き込みます.

Arduino as ISP

書き込み装置を「Arduino as ISP」にし,

ブートローダを書き込む

ブートローダを書き込みます. 「書き込みが完了しました」と表示されたら成功です.

エラー発生時

Double check connections and try again, or use -F to override this check.

→ 回路が間違っています. 配線を確認してください.

avrdude: stk500_getsync(): not in sync: resp=0x00

→ マイコンボードまたはシリアルポートの設定が間違っています.

ATmega168Pにブートローダを書き込む際の注意点

Arduinoのソフトウェアの記述の関係上, ATmega168Pへのブートローダでエラーが発生します. そこで, 定義文を書き換える必要があります.

C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf

メモ帳などで開きます.

#------------------------------------------------------------
# ATmega168
#------------------------------------------------------------

part
    id              = "m168";
    desc            = "ATMEGA168";
     has_debugwire = yes;
     flash_instr   = 0xB6, 0x01, 0x11;
     eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
	             0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
	             0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode  = 0x86;
    # avr910_devcode = 0x;
    signature       = 0x1e 0x94 0x06;
			

ここのsignatureの部分を

signature       = 0x1e 0x94 0x0b;

と書き換えます. ブートローダを書き終えたら元に戻してください. (今後スケッチを書く時にエラーが発生します)

面倒な作業ですが, Arduinoのソフトウェア側が対応しないと出来ません... なお, ATmega328Pではこの問題は発生しません.

おまけ

基板加工機により, 「ブートローダ書き込み専用基板」を製作しました. 回路はFT232RLを利用した秋月電子の回路に, 当記事の回路を組み合わせたものです. チップを量産する方は一台作ってみてはいかがでしょうか.

Arduinoブートローダ 書き込み基板 自作

困った時は

同じような方法でArduinoのブートローダを書こうとしている方は国内外多くいるので, エラーメッセージ等を検索するとだいたいは解決します. 力になれるかはわかりませんが, それでも分からないといった時は お問い合わせ-さささっ.jp にでも相談してください.

管理者

新着記事全体

人気記事全体